/*
* 
* Fichier source projet intel Acceler8 sous license GNU GPL v3.
* Voir http://www.gnu.org/copyleft/gpl.html pour plus d'informations
* La license est egalement disponible dans le repertoire /doc
* 
* Cree le : samedi 12 novembre 2011 à 18 : 20.
* Auteurs : Axel MOINET et Arnaud DURAND.
* 
* Nom de fichier : subseqcompute.h
* Chemin du fichier : ./src/classes/subseqcompute/subseqcompute.h
* 
*
* Description : Classe d'implémentation de calcul de sous-séquence.
* 			La fonction de calcul doit être lancée comme un thread POSIX.
*
* 			!!!! Synchronisation d'accès sur le tableau de Cgh entre les threads !!!!
* 
*/

#ifndef SUB_SEQ_COMPUTE_H_INCLUDED
#define SUB_SEQ_COMPUTE_H_INCLUDED

#include "tbb/concurrent_vector.h"
#include "tbb/task_scheduler_init.h"
#include "tbb/task.h"
#include "tbb/spin_rw_mutex.h"
#include "../taskpsumsmax/taskpsumsmax.h"
#include "../taskssumpmax/taskssumpmax.h"
#include "../threadprincipal/threadprincipal.h"
#include "../../generic/typedefs.h"
#include <iostream>

class subSeqCompute : public tbb::task {

public :
	subSeqCompute(tbb::concurrent_vector<int> p_tabCgh, int g, int h, threadPrincipal *p_thread, FLAG lastCompute);
	int launchCalcul();
	int computeM();
	int findAB();
	int compareResults();
	tbb::task* execute();

private :
	FLAG lastComputeFlag;

	int a, b, g, h, tabSize;

	tbb::concurrent_vector<int> tabCgh;

	tbb::concurrent_vector<int> psum;
	tbb::concurrent_vector<int> smax;

	tbb::concurrent_vector<int> ssum;
	tbb::concurrent_vector<int> pmax;

	tbb::concurrent_vector<int> M;

	threadPrincipal *thread;
};

#endif
